home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 12, No. 02 (1991-02)(MindCraft Publishing)(Side A).zip / Nibble Volume 12, No. 02 (1991-02)(MindCraft Publishing)(Side A).po / BLOCK.S < prev    next >
Text File  |  1996-12-24  |  3KB  |  128 lines

  1. *********************
  2. *      BLOCK.S      *
  3. *  BY DAVID HARRIS  *
  4. *    (C) 1990 BY    *
  5. *  MINDCRAFT PUBL.  *
  6. * CONCORD, MA 01742 *
  7. *                   *
  8. *********************
  9.  
  10. * CREATED WITH MERLIN 816
  11.  
  12. ********************************
  13. *            EQUATES           *
  14. ********************************
  15.  
  16. TBLSTART  EQU $06        ; $06-$07 START OF SHAPE
  17. COUNTER   EQU $08        ; # LINES COMPLETED
  18. TABLE     EQU $09        ; $09-$0A TABLE POINTER
  19. PNTR      EQU $0B        ; $0B-$0C SCREEN POINTER
  20. YNOW      EQU $0D        ; CURRENT LINE NUMBER
  21. SCREEN    EQU $26        ; $26-$27 = HPOSN DATA
  22. WIDTH     EQU $FB        ; WIDTH OF SHAPE
  23. HEIGHT    EQU $FC        ; HEIGHT OF SHAPE
  24. XSTART    EQU $FD        ; LEFT EDGE OF SCREEN IMAGE
  25. YSTART    EQU $FE        ; TOP EDGE OF SCREEN IMAGE
  26. MODE      EQU $FF        ; TRANSFER MODE
  27.  
  28. START     EQU $0300      ; ORIGIN OF CODE
  29. HPOSN     EQU $F411      ; FIND ADDRESS OF LINE
  30.  
  31.           ORG START
  32.  
  33. ********************************
  34. *            PROGRAM           *
  35. ********************************
  36.  
  37. * Poke   6, Least significant byte of table address
  38. * Poke   7, Most significant byte of table address
  39. * Poke 251, Width of block shape
  40. * Poke 252, Height of block shape
  41. * Poke 253, Left X position (in bytes)
  42. * Poke 254, Top Y position
  43. * Poke 255, Transfer mode
  44. *           17 = Logical OR
  45. *           49 = Logical AND
  46. *           81 = Logical EOR
  47. *           209 = Direct copy
  48. *           255 = Capture
  49. * CALL 768 to begin
  50.  
  51.           LDA MODE       ; CHECK TRANSFER MODE
  52.           CMP #$FF       ; IS IT CAPTURE?
  53.           BEQ CAPTURE
  54.  
  55. * Set up code for drawing shape
  56. * LDA (TABLE),Y
  57. * ORA/AND/EOR/CMP (PNTR),Y
  58.  
  59.           STA COLUMN+2   ; STORE TRANSFER MODE
  60.           LDA #TABLE
  61.           STA COLUMN+1
  62.           LDA #PNTR
  63.           STA COLUMN+3
  64.           BNE BEGIN      ; ALWAYS
  65.  
  66. * Set up code for capturing shape
  67. * LDA (PNTR),Y
  68. * STA (TABLE),Y
  69.  
  70. CAPTURE   LDA #PNTR
  71.           STA COLUMN+1
  72.           LDA #$91
  73.           STA COLUMN+2
  74.           LDA #TABLE
  75.           STA COLUMN+3
  76.  
  77. BEGIN     LDA TBLSTART   ; COPY TBLSTART TO TABLE
  78.           STA TABLE      ; SO THAT USER VALUES ARE
  79.           LDA TBLSTART+1 ; PRESERVED BETWEEN CALLS
  80.           STA TABLE+1
  81.           LDA YSTART     ; GET LINE TO START ON
  82.           STA YNOW       ; AND PRESERVE
  83.           LDA #$00
  84.           STA COUNTER    ; INITIALIZE COUNTER
  85.  
  86. ROW       LDA YNOW       ; Y VALUE
  87.           LDX #$00       ; X LSB
  88.           LDY #$00       ; X MSB
  89.           JSR HPOSN      ; CALCULATE BASE ADDRESS
  90.  
  91.           CLC
  92.           LDA SCREEN     ; ADJUST FOR X POSITION
  93.           ADC XSTART
  94.           STA PNTR
  95.           LDA SCREEN+1
  96.           ADC #$00
  97.           STA PNTR+1
  98.  
  99.           LDY #$00
  100.  
  101. * NOTE: The following two lines are modified for
  102. * the transfer mode.  In the case of Capture, the
  103. * STA (PNTR),Y is redundant.
  104.  
  105. COLUMN    LDA (TABLE),Y  ; SPACE HOLDER
  106.           ORA (PNTR),Y   ; SPACE HOLDER
  107.           STA (PNTR),Y   ; PUT ON SCREEN
  108.  
  109.           INY
  110.           CPY WIDTH      ; FINISHED ROW?
  111.           BNE COLUMN     ; NO: DO NEXT COLUMN
  112.  
  113.           CLC            ; INCREMENT TABLE POINTER
  114.           LDA TABLE      ; TO POINT TO NEXT ROW
  115.           ADC WIDTH
  116.           STA TABLE
  117.           LDA #$00
  118.           ADC TABLE+1
  119.           STA TABLE+1
  120.  
  121.           INC YNOW       ; NEXT ROW
  122.           INC COUNTER
  123.           LDA COUNTER
  124.           CMP HEIGHT     ; FINISHED SHAPE?
  125.           BNE ROW        ; NO: DO NEXT ROW
  126.  
  127.           RTS
  128.